# -*- coding: utf-8 -*-

"""
DateTime   : 2020/12/18 11:18
Author     : ZhangYafei
Description:
用五个六面骰子玩的骰子游戏，每投骰子组一次，就会出现5个数字的数组（数字：1-6），统计数组里每个数字出现的次数，将每个数字出现的次数拆分成 3次 和 1次 的组合，然后按照下面的规则进行计数。 注意：如果出现次数大于或者等于3次，那么必须至少有一个按照3次来计算，不能全部按照1次来计算
3次1 = = 1000分 3次6 = = 600分
3次5 = = 500分 3次4 = = 400分
3次3 = = 300分 3次2 = = 200分
1次1 => 100分 1次5 => 50分
1次2 => 0分 1次3 => 0分
1次4 => 0分 1次6 => 0分
例如，5出现了5次，那么应当做作3个5、1个5和1个5来计算得分；5出现了6次，那么应当作3个5、3个5来计算得分，其他数字同理。
扔骰子计算得分
    5 1 3 4 1 50 + 2 * 100 = 250
    1 1 1 3 1 1000 + 100 = 1100
    2 4 4 5 4 400 + 50 = 450
"""
from collections import Counter
import random


def score1(dice):
    """ 方法1 """
    num_dict = dict(Counter(dice))
    res = 0
    for i in num_dict:
        if i == 1:
            res += 1000 * (int(num_dict[i] / 3)) + 100 * (num_dict[i] % 3)
        elif i == 5:
            res += 500 * (int(num_dict[i])) + 50 * (num_dict[i] % 3)
        else:
            res += 100 * (i * int(num_dict[i] / 3))
    return res


def score(dice):
    """ 方法2 """
    sum = 0
    counter = [0, 0, 0, 0, 0, 0]
    points = [1000, 200, 300, 400, 500, 600]
    extra = [100, 0, 0, 0, 50, 0]
    for die in dice:
        counter[die - 1] += 1
    for (i, count) in enumerate(counter):
        sum += (points[i] if count >= 3 else 0) + extra[i] * (count % 3)
    return sum


if __name__ == '__main__':
    dice_list = [random.randint(1, 6) for _ in range(5)]
    print(dice_list)
    scores = score(dice_list)
    print(scores)